# coding=utf-8
# @Author:zcx
# @Time:2024/9/12 11:45
import sys
from PySide6.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QFileDialog
"""
QFileDialog 是 Qt 中用于显示文件对话框的部件，允许用户选择文件或目录

创建了一个按钮，点击按钮将弹出文件对话框，并在控制台输出用户选择的文件路径。
可以通过 setFileMode 方法设置对话框的模式，例如 QFileDialog.ExistingFile 表示打开一个已存在的文件。

关键的 QFileDialog 方法和属性包括：

getOpenFileName(parent, caption, directory, filter): 打开文件对话框，返回用户选择的文件路径和文件过滤器。
getOpenFileNames(parent, caption, directory, filter): 打开文件对话框，允许用户选择多个文件，返回文件路径列表和文件过滤器。
getExistingDirectory(parent, caption, directory): 打开目录对话框，返回用户选择的目录路径。
getSaveFileName(parent, caption, directory, filter): 打开保存文件对话框，返回用户选择的文件路径和文件过滤器。

"""

class FileDialogWindow(QWidget):
    def __init__(self):
        super().__init__()
        # 创建主布局和子部件
        self.layout = QVBoxLayout(self)
        self.open_button = QPushButton("Open File Dialog")

        # 将子部件添加到主布局
        self.layout.addWidget(self.open_button)

        # 连接按钮的点击信号到槽函数
        self.open_button.clicked.connect(self.show_file_dialog)


    def show_file_dialog(self):
        # 创建文件对话框
        file_dialog = QFileDialog(self)

        # 设置文件对话框的标题
        file_dialog.setWindowTitle("选择一个文件")

        # 设置对话框模式为打开文件，文件已存在ExistingFile
        file_dialog.setFileMode(QFileDialog.AnyFile)

        # 设置打开文件的路径: 窗口，打开方式，所有的文件（文件的过滤器）
        selected_file, rest = file_dialog.getOpenFileName(self, "Open File", "", "所有文件(*);;Text Files (*.txt)")

        # 如果用户选择了文件，将文件路径输出到控制台
        if selected_file:
            print(f"Selected file: {selected_file}")



if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = FileDialogWindow()
    window.show()
    sys.exit(app.exec())

